†IPFSを実行しながら学んでいく4 ~リモートのピンニングサービスPinataを使ってみる~ †
IPFSは、ストレージスペースを効率的に管理するために、使用頻度の低いアイテムに対して定期的なガベージコレクションを行うと学びました。 そして、ガベージコレクションからコンテンツを除外するにはピンニングを用いてコンテンツを固定する必要があります(常に必要なものと認識させる)
IPFSのコマンドラインツールでipfs add
を行うと、ローカルのノードでは自動的にピンニングが行われます。
複数のノードを使用しないといけないケースでは、サードパーティのピンニングサービスを使って対処することになります。
サードパーティサービスにはそれぞれ、ファイルをピンニングしてそれらのピンを管理するための独自のインターフェイスがあり、 GUI、API、CLIコマンド、またはその他のツールが含まれる場合がある とのことなのですが、 ベンダーに依存しないIPFS Pinning Service APIをサポートしている場合は コマンドラインを介してIPFS自体でサポートされています。
やってみる
Pinata というサービスがIPFS Pinning Service APIをサポートしているので、今回はこのサービスを使っていきたいと思います。
IPFSのコマンドで扱うには、ipfs pin remote
コマンドを利用します。
$ ipfs pin remote --help USAGE ipfs pin remote - Pin (and unpin) objects to remote pinning service. SYNOPSIS ipfs pin remote SUBCOMMANDS ipfs pin remote add <ipfs-path> - Pin object to remote pinning service. ipfs pin remote ls - List objects pinned to remote pinning service. ipfs pin remote rm - Remove pins from remote pinning service. ipfs pin remote service - Configure remote pinning services.
Pinataに登録してAPI KEYを作成する
登録画面にアクセスして、アカウントを作ります。
ログイン後、API KEYSのページで新規のKeyを作成します。
ローカルのipfsコマンドラインツールからPinning Services APIを使用するので、 Pinning Services APIのところにあるトグルをすべてオンにします。
JWT(Secret access token)が必要になるので、これを控えておきます。
ipfsコマンドでリモートサービスとして登録
新しいピンニングサービスを追加するには、次のコマンドを使用します。
$ ipfs pin remote service add <<nickname>> <<endpoint URL>> <<myAccessKey>>
今回はPinataを使うので、エンドポイントのURLはhttps://api.pinata.cloud/psa
です。
<<myAccessKey>>
の箇所は、APIKEYを作った時に控えたJWTを利用します。
$ ipfs pin remote service add pinata https://api.pinata.cloud/psa <<myAccessKey>>
で登録しました。
ipfs pin remote service ls
を実行して、登録したサービスが表示されればOKです。
$ ipfs pin remote service ls pinata https://api.pinata.cloud/psa
pinataでピンニングを行う
ipfs pin remote add
でピンニングが可能です。
$ ipfs pin remote add --help USAGE ipfs pin remote add <ipfs-path> - Pin object to remote pinning service. SYNOPSIS ipfs pin remote add [--service=<service>] [--name=<name>] [--background] [--] <ipfs-path> ARGUMENTS <ipfs-path> - Path to object(s) to be pinned. OPTIONS --service string - Name of the remote pinning service to use (mandatory). --name string - An optional name for the pin. --background bool - Add to the queue on the remote service and return immediately (does not wait for pinned status). Default: false.
service
オプションには追加したリモートサービスの名前を指定します。
name
オプションには人間が読んで分かりやすい名前をつけるときに指定します。
例) pinata にピンニングする
$ ipfs pin remote add --service=pinata --name=blogs QmPMYeLBc3wX4LnJ2ZpMBL7izoqhZq9MbXhpU164Wg1gwz CID: QmPMYeLBc3wX4LnJ2ZpMBL7izoqhZq9MbXhpU164Wg1gwz Name: blogs Status: pinned
ステータスの確認
リモートでのピンニングの状況を確認するには、ipfs pin remote ls
を使います
$ ipfs pin remote ls --service=pinata QmPMYeLBc3wX4LnJ2ZpMBL7izoqhZq9MbXhpU164Wg1gwz pinned blogs
pinataのWebコンソールでも確認できました。
ブラウザからコンテンツを表示
pinataのゲートウェイを使ってファイルを表示させることも可能です。
https://gateway.pinata.cloud/ipfs/QmPMYeLBc3wX4LnJ2ZpMBL7izoqhZq9MbXhpU164Wg1gwz/
ローカルにあるファイルのバックアップ用途、別の場所からもアクセスしたいファイルがある場合などはこういったサービスを使って永続化すると良いかと思います